// 给你一个二叉搜索树的根节点 root ，返回 树中任意两不同节点值之间的最小差值 。

int min;
// 1. 不是求相邻节点的差
// void dfs(struct TreeNode *root) {
//     if (root == NULL) return ;
//     if (root->left) {
//         min = fmin(min, root->val - root->left->val);
//         dfs(root->left);
//     }
//     if (root->right) {
//         min = fmin(min, root->right->val - root->val);
//         dfs(root->right);
//     }
// }

// 2. 中序遍历可得到升序数组, 然后遍历数组即可求得最小值
// void dfs(struct TreeNode *root, int arr[], int *idx) {
//     if (root == NULL) return ;
//     dfs(root->left, arr, idx);
//     arr[(*idx)++] = root->val;
//     dfs(root->right, arr, idx);
// }

// int minDiffInBST(struct TreeNode* root){
//     min = INT_MAX;
//     int arr[100], idx = 0;
//     dfs(root, arr, &idx);

//     for (int i = 0; i < idx-1; i++) {
//         min = fmin(min, arr[i+1] - arr[i]);
//     }
//     return min;
// }

// 中序遍历结果不存储到数组，在dfs中更新
struct TreeNode *prev;
void dfs(struct TreeNode *root) {
    if (root == NULL) return ;
    dfs(root->left);
    if (prev != NULL) {
        min = fmin(min, root->val - prev->val);
    }
    prev = root;
    dfs(root->right);
}

int minDiffInBST(struct TreeNode* root){
    min = INT_MAX;
    prev = NULL;
    dfs(root);
    return min;
}